/**
 * 个人中心页面API调用模块
 * 提供用户信息管理、密码修改、头像上传等功能
 */
class HeroProfile {
    
    /**
     * 获取用户个人信息
     * @returns {Promise} 用户信息数据
     */
    static async getUserProfile() {
        try {
            const response = await HeroRequest.get('/system/user/profile');
            return response;
        } catch (error) {
            console.error('获取用户个人信息失败:', error);
            throw error;
        }
    }
    
    /**
     * 更新用户个人信息
     * @param {Object} userData 用户数据
     * @param {string} userData.nickName 用户昵称
     * @param {string} userData.phonenumber 手机号码
     * @param {string} userData.email 邮箱
     * @param {string} userData.sex 性别
     * @returns {Promise} 更新结果
     */
    static async updateUserProfile(userData) {
        try {
            const response = await HeroRequest.put('/system/user/profile', userData);
            return response;
        } catch (error) {
            console.error('更新用户个人信息失败:', error);
            throw error;
        }
    }
    
    /**
     * 修改用户密码
     * @param {string} oldPassword 旧密码
     * @param {string} newPassword 新密码
     * @returns {Promise} 修改结果
     */
    static async updateUserPassword(oldPassword, newPassword) {
        try {
            const response = await HeroRequest.put('/system/user/profile/updatePwd', {
                oldPassword: oldPassword,
                newPassword: newPassword
            });
            return response;
        } catch (error) {
            console.error('修改用户密码失败:', error);
            throw error;
        }
    }
    
    /**
     * 上传用户头像
     * @param {File} file 头像文件
     * @returns {Promise} 上传结果
     */
    static async uploadAvatar(file) {
        try {
            const formData = new FormData();
            formData.append('avatarfile', file);
            
            const response = await HeroRequest.post('/system/user/profile/avatar', formData);
            return response;
        } catch (error) {
            console.error('上传用户头像失败:', error);
            throw error;
        }
    }
    
    /**
     * 验证手机号码格式
     * @param {string} phone 手机号码
     * @returns {boolean} 是否有效
     */
    static validatePhone(phone) {
        const phoneRegex = /^1[3-9]\d{9}$/;
        return phoneRegex.test(phone);
    }
    
    /**
     * 验证邮箱格式
     * @param {string} email 邮箱地址
     * @returns {boolean} 是否有效
     */
    static validateEmail(email) {
        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return emailRegex.test(email);
    }
    
    /**
     * 验证密码格式
     * @param {string} password 密码
     * @returns {Object} 验证结果
     */
    static validatePassword(password) {
        const result = {
            isValid: true,
            message: ''
        };
        
        if (!password || password.length < 6) {
            result.isValid = false;
            result.message = '密码长度不能少于6位';
            return result;
        }
        
        if (password.length > 20) {
            result.isValid = false;
            result.message = '密码长度不能超过20位';
            return result;
        }
        
        // 检查非法字符
        if (/[<>"'\\|]/.test(password)) {
            result.isValid = false;
            result.message = '密码不能包含非法字符：< > " \' \\\\ |';
            return result;
        }
        
        return result;
    }
    
    /**
     * 验证用户信息表单
     * @param {Object} formData 表单数据
     * @returns {Object} 验证结果
     */
    static validateUserForm(formData) {
        const errors = {};
        
        // 验证昵称
        if (!formData.nickName || !formData.nickName.trim()) {
            errors.nickName = '用户昵称不能为空';
        } else if (formData.nickName.trim().length > 30) {
            errors.nickName = '用户昵称长度不能超过30个字符';
        }
        
        // 验证手机号
        if (!formData.phonenumber || !formData.phonenumber.trim()) {
            errors.phonenumber = '手机号码不能为空';
        } else if (!this.validatePhone(formData.phonenumber.trim())) {
            errors.phonenumber = '请输入正确的手机号码';
        }
        
        // 验证邮箱
        if (!formData.email || !formData.email.trim()) {
            errors.email = '邮箱地址不能为空';
        } else if (!this.validateEmail(formData.email.trim())) {
            errors.email = '请输入正确的邮箱地址';
        }
        
        return {
            isValid: Object.keys(errors).length === 0,
            errors: errors
        };
    }
    
    /**
     * 验证密码修改表单
     * @param {Object} formData 表单数据
     * @returns {Object} 验证结果
     */
    static validatePasswordForm(formData) {
        const errors = {};
        
        // 验证旧密码
        if (!formData.oldPassword || !formData.oldPassword.trim()) {
            errors.oldPassword = '旧密码不能为空';
        }
        
        // 验证新密码
        const newPwdValidation = this.validatePassword(formData.newPassword);
        if (!newPwdValidation.isValid) {
            errors.newPassword = newPwdValidation.message;
        }
        
        // 验证确认密码
        if (!formData.confirmPassword || !formData.confirmPassword.trim()) {
            errors.confirmPassword = '确认密码不能为空';
        } else if (formData.newPassword !== formData.confirmPassword) {
            errors.confirmPassword = '两次输入的密码不一致';
        }
        
        return {
            isValid: Object.keys(errors).length === 0,
            errors: errors
        };
    }
    
    /**
     * 格式化日期显示
     * @param {string} dateString 日期字符串
     * @returns {string} 格式化后的日期
     */
    static formatDate(dateString) {
        if (!dateString) return '-';
        
        try {
            const date = new Date(dateString);
            return date.toLocaleDateString('zh-CN', {
                year: 'numeric',
                month: '2-digit',
                day: '2-digit',
                hour: '2-digit',
                minute: '2-digit'
            });
        } catch (error) {
            console.error('日期格式化失败:', error);
            return dateString;
        }
    }
    
    /**
     * 处理文件上传预览
     * @param {File} file 文件对象
     * @param {Function} callback 回调函数
     */
    static previewImage(file, callback) {
        if (!file) return;
        
        // 检查文件类型
        if (!file.type.startsWith('image/')) {
            throw new Error('请选择图片文件');
        }
        
        // 检查文件大小 (限制为5MB)
        const maxSize = 5 * 1024 * 1024;
        if (file.size > maxSize) {
            throw new Error('图片文件大小不能超过5MB');
        }
        
        const reader = new FileReader();
        reader.onload = function(e) {
            if (callback && typeof callback === 'function') {
                callback(e.target.result);
            }
        };
        reader.onerror = function() {
            throw new Error('图片读取失败');
        };
        reader.readAsDataURL(file);
    }
    
    /**
     * 显示成功消息
     * @param {string} message 消息内容
     */
    static showSuccess(message) {
        if (typeof HeroCommon !== 'undefined' && HeroCommon.showNotification) {
            HeroCommon.showNotification(message, 'success');
        } else {
            alert(message);
        }
    }
    
    /**
     * 显示错误消息
     * @param {string} message 消息内容
     */
    static showError(message) {
        if (typeof HeroCommon !== 'undefined' && HeroCommon.showNotification) {
            HeroCommon.showNotification(message, 'error');
        } else {
            alert('错误: ' + message);
        }
    }
    
    /**
     * 显示警告消息
     * @param {string} message 消息内容
     */
    static showWarning(message) {
        if (typeof HeroCommon !== 'undefined' && HeroCommon.showNotification) {
            HeroCommon.showNotification(message, 'warning');
        } else {
            alert('警告: ' + message);
        }
    }
    
    /**
     * 显示信息消息
     * @param {string} message 消息内容
     */
    static showInfo(message) {
        if (typeof HeroCommon !== 'undefined' && HeroCommon.showNotification) {
            HeroCommon.showNotification(message, 'info');
        } else {
            alert(message);
        }
    }
}

// 确保模块在window对象上可用
if (typeof window !== 'undefined') {
    window.HeroProfile = HeroProfile;
}

// 触发模块就绪事件
document.addEventListener('DOMContentLoaded', function() {
    // 创建并触发自定义事件
    const event = new CustomEvent('hero:profileReady', {
        detail: { module: 'HeroProfile' }
    });
    document.dispatchEvent(event);
});